package com.hjm.project.agentInfo.agentInfo.mapper;

import java.util.List;
import java.util.Map;

import com.hjm.project.agentInfo.agentInfo.domain.AgentInfo;
import com.hjm.project.agentInfo.agentInfo.domain.AgentInfoExport;
import com.hjm.project.agentInfo.agentInfo.domain.AgentInfoNextVo;

/**
 * 服务商Mapper接口
 *
 * @author LOVE
 * @date 2020-11-24
 */
public interface AgentInfoMapper {
    /**
     * 查询导出服务商信息
     *
     * @param agentInfo 服务商
     * @return 服务商集合
     */
    public List<AgentInfoExport> selectAgentInfoExportList(AgentInfo agentInfo);

    /**
     * 查询导出服务商信息
     *
     * @param agentNum 服务商
     * @return 服务商集合
     */
    public List<AgentInfoNextVo> selectAgentInfoNext(String agentNum);

    /**
     * 查询服务商
     *
     * @param agentNum 服务商ID
     * @return 服务商
     */
    public AgentInfo selectAgentInfoById(String agentNum);

    public List<AgentInfo> selectNextAgentInfoList(AgentInfo agentInfo);
    /**
     * 查询服务商
     *
     * @param agentNum 服务商ID
     * @return 服务商
     */
    public Map<String,Object> selectAgentInfoMapById(String agentNum);

    /**
     * 查询服务商列表
     *
     * @param agentInfo 服务商
     * @return 服务商集合
     */
    public List<AgentInfo> selectAgentInfoList(AgentInfo agentInfo);


    public List<AgentInfo> selectAgentInfoListAll(AgentInfo agentInfo);



    /**
     * 获取所有服务商带服务商机具总量
     * @Param [agentInfo]
     * @Return java.util.List<com.hjm.project.agentInfo.agentInfo.domain.AgentInfo>
     */
    public List<AgentInfo> selectAgentInfoTeamList(AgentInfo agentInfo);


    /**
     * 新增服务商
     *
     * @param agentInfo 服务商
     * @return 结果
     */
    public int insertAgentInfo(AgentInfo agentInfo);

    /**
     * 修改服务商
     *
     * @param agentInfo 服务商
     * @return 结果
     */
    public int updateAgentInfo(AgentInfo agentInfo);

    /**
     * 删除服务商
     *
     * @param agentNum 服务商ID
     * @return 结果
     */
    public int deleteAgentInfoById(String agentNum);

    /**
     * 批量删除服务商
     *
     * @param agentNums 需要删除的数据ID
     * @return 结果
     */
    public int deleteAgentInfoByIds(String[] agentNums);


    /**
     * 查询本级及下级服务商数量
     *
     * @param agentNum
     * @return
     */
    public int getAgentNext(String agentNum);

    /**
     * 查询是否绑定机具
     *
     * @param agentNum
     * @return
     */
    public int findAgentPosNo(String agentNum);

    /**
     * 生成一个服务商编号
     *
     * @return
     */
    public int getAgentNum();


    /**
     * 更新服务商
     *
     * @return
     */
    public int updateAgent(AgentInfo agentInfo);
    public int updateAgent1(AgentInfo agentInfo);
    public int updateAgentGrade(AgentInfo agentInfo);

    public AgentInfo selectAgentInfoByBelong(String agentNum);


    public AgentInfo selectBeautiful(AgentInfo agentInfo);


    /**
     * 根据代理商编号更新指标数
     *
     * @param agentInfo
     * @return
     */
    public int updateAgentNorm(AgentInfo agentInfo);


    public Integer selectBelongAgent(AgentInfo agentInfo);

    /**
     * 获取一个服务商的本级级以下终端数量
     * agentNum 代理商编号
     * @Param [agentInfo]
     * @Return java.util.List<com.hjm.project.agentInfo.agentInfo.domain.AgentInfo>
     */
    public List<AgentInfo> selectBetweenAgent(AgentInfo agentInfo);


    /**
     * 获取一个服务商的所有下级服务商 不包含本级
     * agentNum 代理商编号
     * @Param [agentInfo]
     * @Return java.util.List<com.hjm.project.agentInfo.agentInfo.domain.AgentInfo>
     */
    public List<AgentInfo> selectBetweenAgentNoBelongAgent(AgentInfo agentInfo);
    /**
     * 获取一个服务商的本级级以上代理
     * agentNum 代理商编号
     * @Param [agentInfo]
     * @Return java.util.List<com.hjm.project.agentInfo.agentInfo.domain.AgentInfo>
     */
    public List<AgentInfo> selectBetweenAgentTop(AgentInfo agentInfo);

    /**
     * 获取一个代理的编号
     * @Param [agentInfo]
     * @Return java.util.List<com.hjm.project.agentInfo.agentInfo.domain.AgentInfo>
     */
    public List<AgentInfo> selectOneAgentNum(AgentInfo agentInfo);

    /**
     * 获取机器为2.0的所属代理信息
     * @param agentInfo
     * @return
     */
    public List<AgentInfo> selectOneAgentNumNew(AgentInfo agentInfo);


    List<Map<String, Object>> lookSendAgentInfoList(AgentInfo agentInfo);

    void markSendAgentInfoResult(Map<String, Object> agentMap);


    /**
     * 查询登录代理团队信息
     *
     * @param agentNum 服务商ID
     * @return 服务商
     */
    List<AgentInfo> selectAgentListBy(AgentInfo agentNum);

    /**
     * 批量删除代理商扣款规则
     *
     * @param agentInfo
     * @return 结果
     */
    List<AgentInfo> selectTopAgentInfo(AgentInfo agentInfo);

    /**
     * 查询代理商信息
     * @param agentNum
     * @return
     */
    AgentInfo selectAgentInfoByAgentNum1(String agentNum);

    /**
     * 向上递归查询代理商信息
     * @param agentNum
     * @return
     */
    AgentInfo selectAgentInfoByAgentNum2(String agentNum);

    /**
     * 向下递归查询代理商信息
     * @param agentNum
     * @return
     */
    List<AgentInfo> selectAgentInfoByAgentNum3(String agentNum);

    AgentInfo selectAgentInfoByAgent1(AgentInfo agentInfo);

    List<AgentInfo> selectAgentInfoByAgent2(AgentInfo agentInfo);

    /**
     * 查询服务商
     *
     * @param agentNum 服务商ID
     * @return 服务商
     */
    public AgentInfo selectAgentInfoById1(String agentNum);
}
